package com.ken.quartz.scheduler;

import com.ken.quartz.job.CronTriggerJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 一个CronTrigger实例
 * Created by renchongyu on 2018/11/24.
 */
public class CronTriggerScheduler {
    public static void main(String[] args) throws Exception{
        //创建一个JobDetail实例，将该实例与HelloJob Class绑定
        JobDetail jobDetail = JobBuilder.newJob(CronTriggerJob.class)
                .withIdentity("myJob")
                .build();
        /**
         * 创建一个CronTrigger实例:每秒钟触发一次
         *
         */
        CronTrigger trigger = (CronTrigger)TriggerBuilder.newTrigger().withIdentity("myTrigger","group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
                .build();
        //1、2017年内每天10点15分触发一次。--- 0 15 10 ? * * 2017
        //2、每天的14点整至14点59分55秒，以及18点整至18点59分55秒，每5秒触发一次。 ---- 0/5 * 14,18 * * ?
        //作业
        //3、每月周一至周五的10点15分触发一次。--- 0 15 10 ? * MON-FRI
        //4、每月最后一天的10点15分触发一次。  --- 0 15 10 L * *
        //5、每月第三个周五的10点15分触发一次。--- 0 15 10 ? * 6#3
        //创建Scheduler实例
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail,trigger);
        Thread.sleep(2000);
        scheduler.standby();//挂起,再重启后会把挂起那段时间的任务都执行。
        Thread.sleep(3000);
        scheduler.start();//重启
        Thread.sleep(3000);
        scheduler.shutdown();//完全停止直接关闭
        //scheduler.shutdown(true);//执行完job后关闭
    }
}
